package cn.zqy.demo2.day02.demo02;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * 泛型：
 *       创建集合对象,使用泛型
 *         好处:
 *             1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
 *             2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
 *          弊端:
 *             泛型是什么类型,只能存储什么类型的数据

 *         创建集合对象,不使用泛型
 *         好处:
 *             集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据
 *         弊端:
 *             不安全,会引发异常
 * */
public class Demo01Generic {
    public static void main(String[] args) {
        useGeneric();
        System.out.println();
        noGeneric();
    }

    //不使用泛型
    private static void noGeneric() {
        ArrayList li = new ArrayList();
        li.add(123);
        li.add("abc");
        li.add(19.0);

        // 迭代器无需添加类型
        Iterator ll = li.iterator();
        while (ll.hasNext()) {
            // 用Object来接受
            Object i =  ll.next();
            System.out.print(i);
        }

       /*for (Object i : li) {
           System.out.print(i + "  ");
       }*/
    }

    // 使用泛型
    private static void useGeneric() {
        ArrayList<String> li = new ArrayList<>();
        li.add("111");
        li.add("222");
        li.add("333");
        li.add("444");
        // 制定了类型，就不能随意添加类型了
        //  li.add(1) /*add  (java.lang.String)in ArrayList cannot be applied to (int) */

        // 集合已经明确具体存放的元素类型,迭代器也要添加类型
        Iterator<String> ll = li.iterator();
        while (ll.hasNext()) {
            String next = ll.next();
            System.out.print(next + "  ");
        }
    }
}
